namespace EventBehaviorTree
{
    public enum NodeMessage
    {
        /// <summary>
        /// to be start
        /// </summary>
        Start,
        /// <summary>
        /// get the result
        /// </summary>
        Success,
        /// <summary>
        /// get the result
        /// </summary>
        Failure,
        /// <summary>
        /// stop coroutine, only send by composite node
        /// </summary>
        COMMAND_Stop,
        /// <summary>
        /// stop behavior tree
        /// </summary>
        REQUEST_Abort,
    }

    public enum TaskPattern
    {
        Normal,
        Abort,
    }

    public enum ConditionPattern
    {
        /// <summary>
        /// continously report
        /// </summary>
        Watcher,
        /// <summary>
        /// wait for the result for a while
        /// </summary>
        TriggerTimer,
    }

    public enum NodeType
    {
        Sequencer,
        Selector,
        TimerSequencer,
        ConditionSequencer,
        TaskNode,
    }

    public enum TimerPattern
    {
        /// <summary>
        /// success while in the effect time
        /// </summary>
        While,
        /// <summary>
        /// success once the time run out
        /// </summary>
        Until,
    }

    public interface ICondition
    {
        public bool Condition();
        public void ResetCondition();
    }

    public interface IAction
    {
        public void Action();
    }
}
